(*******************************************************************************
   Modulo: Profesore
   Descripcion: programa que contiene los procesos con respecto al profesor 
   texto
   Autor: Jesús Reyes
   Fecha: 29/05/2012
 *******************************************************************************)

IMPLEMENTATION MODULE Tad_Profesor;

FROM libc IMPORT exit, printf;
FROM MathLib0 IMPORT sqrt;
FROM FpuIO IMPORT WriteReal;
FROM StrIO IMPORT WriteString, WriteLn;
FROM Scan IMPORT OpenSource;
FROM NumberIO IMPORT ReadInt, WriteInt;
FROM FIO IMPORT OpenToRead, File, EOF, ReadString;
FROM DynamicStrings IMPORT String, Slice, CopyOut, Index, InitString;
FROM StringConvert IMPORT StringToInteger;
FROM Storage IMPORT ALLOCATE, DEALLOCATE;

TYPE Profesor = POINTER TO Prof;

TYPE Prof = RECORD
      codigo: INTEGER;
      nombre: String;
    END;
    

PROCEDURE Nuevo (codigo:INTEGER; nombre:String):Profesor;
VAR maestro:Profesor;
BEGIN
        NEW(maestro);
			IF (maestro = NIL) THEN
		  RETURN NIL;
    END;
    maestro^.codigo := codigo;
    maestro^.nombre := nombre;
    RETURN maestro;

END Nuevo;

PROCEDURE AsigCodigo (VAR maestro: Profesor; codigo: INTEGER);

BEGIN

  maestro^.codigo := codigo;
  
END AsigCodigo;

PROCEDURE AsigNombre (VAR maestro: Profesor; nombre: String);

BEGIN

  maestro^.nombre := nombre;
  
END AsigNombre;

PROCEDURE GetCodigo (maestro: Profesor) : INTEGER;
VAR x: INTEGER;

BEGIN

  x := maestro^.codigo;
  
  RETURN x;
  
END GetCodigo;

PROCEDURE GetNombre (maestro: Profesor) : String;

VAR x: String;

BEGIN

  x := maestro^.nombre;
  
  RETURN x;
  
END GetNombre;


PROCEDURE Carga(data:File) : Profesor;
VAR valido : BOOLEAN;
VAR string,nombre:String;
VAR codigo : INTEGER;
VAR linea: ARRAY [0..200] OF CHAR;
VAR inic,fin,i : CARDINAL;
VAR maestro: Profesor;
  BEGIN

	valido := TRUE;
	inic := 0;
	ReadString(data, linea);
	string := InitString(linea);
	fin := Index(string,":",inic);
	codigo := StringToInteger(Slice(string,inic,fin),10,valido);
	inic := fin + 1;
	fin := 0;
	nombre := Slice(string,inic,fin);
	maestro := Nuevo(codigo,nombre);
	
	RETURN maestro;
	
END Carga;

  
PROCEDURE Imprimir(maestro:Profesor);
VAR x : ARRAY [0..19] OF CHAR;
BEGIN
	WriteString('(');
	WriteString('Codigo:');
	WriteInt(GetCodigo(maestro),0);
	WriteString(',Nombre:');
	CopyOut(x,GetNombre(maestro));
	WriteString(x);
	WriteString(')');
END Imprimir;

PROCEDURE ImprimirNombre(maestro: Profesor);
VAR x: ARRAY [0..19] OF CHAR;
BEGIN
	CopyOut(x,GetNombre(maestro));
	WriteString(x);
END ImprimirNombre;

END Tad_Profesor.
